/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.search; import java.awt.*; import java.io.ObjectStreamException; import java.io.Serializable; import java.beans.*; import javax.swing.*; import javax.swing.border.*; import org.openide.windows.*; import org.openide.explorer.*; import org.openide.explorer.view.*; import org.openide.nodes.*; import org.openidex.search.*; import org.netbeans.modules.search.res.*; /** * Display results in Explorer like manner. * * @author Petr Kuzel * @version 1.0 */ public class ResultViewTopComponent extends TopComponent implements ExplorerManager.Provider { /** My data holder. */ private ResultModel model; /** My ExplorerManager.Provider. */ private ExplorerPanel exp; /** My control panel. */ private ResultViewPanel buttonPanel; /** Listen CURRENT nodes. */ private PropertyChangeListener managerListener; /** Creates new ResultViewTopComponent */ public ResultViewTopComponent(ResultModel model) { setLayout(new BorderLayout()); ManagerListener managerListener = new ManagerListener(); // add bean tree view exp = new ExplorerPanel(); exp.setLayout(new BorderLayout()); exp.setPreferredSize(new Dimension(250,350)); exp.getExplorerManager().addPropertyChangeListener(managerListener); BeanTreeView tree = new BeanTreeView(); tree.setBorder(new EtchedBorder()); exp.add(tree, BorderLayout.CENTER); add(exp, BorderLayout.CENTER); buttonPanel = new ResultViewPanel(model); buttonPanel.setBorder(new EmptyBorder(0,4,0,0)); add(buttonPanel, BorderLayout.EAST); String labela = Res.text("LABEL_SEARCH_RESULTS"); // NOI18N // set proper border // workaround for empty border erasing of titled one setBorder( new CompoundBorder ( new TitledBorder( new CompoundBorder ( new EmptyBorder(4,4,4,4), new EtchedBorder() ), labela), new EmptyBorder(4,4,4,4) )); setName(labela); setModel(model); } /** Set new model. */ public void setModel(ResultModel model) { this.model = model; buttonPanel.setModel(model); Node root = model.getRoot(); exp.getExplorerManager().setRootContext(root); } /** @return search icon. */ public Image getIcon() { return Res.image("SEARCH"); // NOI18N } /** ExplorerPanel.Provider */ public ExplorerManager getExplorerManager() { return exp.getExplorerManager(); } /** Stop search before closing. */ public boolean canClose(Workspace workspace, boolean last) { model.stop(); exp.removePropertyChangeListener(managerListener); return true; } /** Listener on the explorer manager properties. * Changes selected nodes of this frame. */ private class ManagerListener implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent evt) { if (ExplorerManager.PROP_SELECTED_NODES.equals(evt.getPropertyName())) { Node[] nodes = exp.getExplorerManager().getSelectedNodes(); setActivatedNodes(nodes); DetailCookie cake = null; if (nodes != null && nodes.length == 1) { cake = (DetailCookie) nodes[0].getCookie(DetailCookie.class); } buttonPanel.showDetail(cake); return; } } } // Remove itself from serialization. public Object writeReplace() throws ObjectStreamException { return new Hack(); } private static class Hack implements Serializable { public Object readResolve() throws ObjectStreamException { return null; } public Hack() { } } } /* * Log * 7 Gandalf 1.6 1/13/00 Radko Najman I18N * 6 Gandalf 1.5 1/11/00 Petr Kuzel Result details added. * 5 Gandalf 1.4 1/5/00 Petr Kuzel Margins used. Help * contexts. * 4 Gandalf 1.3 1/4/00 Petr Kuzel Bug hunting. * 3 Gandalf 1.2 12/17/99 Petr Kuzel Bundling. * 2 Gandalf 1.1 12/16/99 Petr Kuzel * 1 Gandalf 1.0 12/15/99 Petr Kuzel * $ */